#include <stdio.h>

// #define show_type(x) _Generic((x),  \
//     int: printf("int %d\n", x),     \
//     float: printf("float %f\n", x), \
//     double: printf("double %f\n", x), \
//     default: printf("not support type") \
// )

#define show_type(X) _Generic((X),\
    int: printf("int %d\n", X),     \
    float: printf("float %f\n", X), \
    double: printf("double %f\n", X), \
    default: printf("not support type") \
)(X)

int main()
{
    int a = 5;
    show_type(a);

    float b = 3.14;
    show_type(b);

    double c = 1.23456789;
    show_type(c);

    char d = 'a';
    show_type(d);

    unsigned int e = 11;
    show_type(e);

    return 0;
}